package com.rad.net.protocol.android.decoder;

import android.text.TextUtils;

import com.rad.net.protocol.android.utils.LogUtils;
import com.rad.net.protocol.common.result.BaseResult;


/** 
 * 类说明：   使用该类时需要设置存放继承{@link BaseResult}的子类的包名，通过包名检索返回对象的结果类，
 * 如果未设置则会导致解码器找不到结果对象从而返回结果为null。
 * @author  xinhui.cheng
 * @date    2014-8-20
 * @version 1.0
 */
public class DefaultJsonDecoder extends BaseJsonDecoder {

	private static final String TAG = DefaultJsonDecoder.class.getSimpleName();
	//Result包名
	private static final String FRAMEWORK_PKG = BaseResult.class.getPackage().getName();
	
	
	private String mResultPackage = null;
	
	/**
	 * @param resultPkg
	 *            返回结果类所在的包名
	 */
	public DefaultJsonDecoder(String resultPkg) {
		mResultPackage = resultPkg;
	}
	
	@Override
	public Class<?> getTargetClass(String jsonString) {
		if(TextUtils.isEmpty(jsonString)){
			return null;
		}
		if(TextUtils.isEmpty(mResultPackage)){
			LogUtils.e(TAG, "result package is null!");
			return null;
		}
		Class<?> c = null;
		try {
			BaseResult result = decodeJson(jsonString, BaseResult.class);
			//查找指定的结果包
			c = findClass(mResultPackage, result.getType());
			if(c == null){
				//查找框架结果基类包
				c = findClass(FRAMEWORK_PKG, result.getType());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return c;
	}
	
	private Class<?> findClass(String pkg ,String type){
		String className = pkg+"."+type;
		Class<?> clazz = null;
		try {
			clazz = Class.forName(className);
		} catch (ClassNotFoundException e) {
			LogUtils.w(TAG, e.toString());
		}
		return clazz;
	}

}
